/**
 有三根杆子A，B，C。A杆上有 N 个 (N>1) 穿孔圆盘，盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆：

每次只能移动一个圆盘；
大盘不能叠在小盘上面。
提示：可将圆盘临时置于 B 杆，也可将从 A 杆移出的圆盘重新移回 A 杆，但都必须遵循上述两条规则。
问：如何移？最少要移动多少次？
 */

#include <stdio.h>

// 将n个盘子从a上借助b移动到c上
void hannoi(int n, char a, char b, char c) {
    if (n <= 0) {
        return;
    }

    // 将n-1个盘子, 从a上, 借助c移动到b上
    hannoi(n - 1, a, c, b);

    // 将a上剩下的一个盘子从a上移动到c上
    printf("%c -> %c\n", a, c);

    // 最后将b上的n-1个盘子借助a移动到c上
    hannoi(n - 1, b, a, c);
}

int main(int argc, char const *argv[])
{
    hannoi(20, 'A', 'B', 'C');
    return 0;
}
